/***************************************************************************
 创建者：华磊
 开始时间：         : 2020.12.08
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   运动指令属性编辑视窗
*                                                                         *
 ***************************************************************************/
#ifndef MOTIONINSTRUCTIONDELEGATE_H
#define MOTIONINSTRUCTIONDELEGATE_H

#include "motioninstructiondelegate_global.h"
#include "../MotionInstructionView/motioninstructionview.h"
#include "../../CommunicateDelegate/moveoperation.h"

/**
 * @brief The MotionInstructionDelegate class　运动指令编辑测试用代理类
 */
class MOTIONINSTRUCTIONDELEGATESHARED_EXPORT MotionInstructionDelegate : public QObject
{
    Q_OBJECT

public:
    MotionInstructionDelegate(GlobalData *globalDataIn,MoveOperation *moveOperationIn,
                              GlobalData *ioDataIn,
                              QWidget *parent = 0);

    /**
     * @brief initialView                   初始化界面成员变量
     */
    void initialView();



public:
    MotionInstructionView *motionInstructionView;

private:
    QTranslator translator;
    GlobalData *globalData;
    GlobalData *ioData;
    MoveOperation *moveOperation;

public:
    void changeLanguage(int language);

signals:
    /**
     * @brief msgBoxSignal                  通知 打开消息框
     */
    void msgBoxSignal(int type,QString title,QString text);

    void saveFileAndUpdateCtrlSignal(QString fileName,QString md5);

    /**
     * @brief moveToPointSignal             移动到点 信号
     * @param movePoint
     */
    //void moveToPointSignal(MoveParameter movePoint);

    /**
     * @brief moveToPointSignal             停止移动到点 信号
     * @param movePoint
     */
    //void stopMoveToPointSignal();

    /**
     * @brief changePointToDegCommSignal    转换 关节点
     * @param tmpPoint
     */
    void changePointToDegCommSignal(PointPro tmpPoint);
    /**
     * @brief changePointToWorldCommSignal  转换 笛卡尔点
     * @param tmpPoint
     */
    void changePointToWorldCommSignal(PointPro tmpPoint);

    void setPrSignal(int number,PointPro tmpPoint);

    void setIsSaveSignal(bool state);

public slots:
    /**
     * @brief finishEditInstructionSlot     完成指令编辑槽函数
     */
    void finishEditInstructionSlot();

    /**
     * @brief selectJInstructionSlot        选择J在指令槽函数
     */
    void selectJInstructionSlot();
    /**
     * @brief selectLInstructionSlot        选择L指令槽函数
     */
    void selectLInstructionSlot();

    /**
     * @brief unlockPointSlot           点锁定与解锁槽函数
     */
    void unlockPointSlot();

    /**
     * @brief recordPointSlot           载入点槽函数
     * @param pointPro　点信息
     */
    void recordPointSlot(int type, int pointNum);

    /**
     * @brief moveToPointSlot           移动到点槽函数
     * @param pointPro　点信息
     */
    void moveToPointSlot(int type, int pointNumber);

    /**
     * @brief moveToPointFinishSlot     移动到点完成槽函数
     * @param pointPro　点信息
     */
    void moveToPointFinishSlot();

    /**
     * @brief changePointToDegSlot      转换成关节点
     * @param pointNum
     */
    void changePointToDegSlot(int pointNum);
    /**
     * @brief changePointToWorldSlot    转换成笛卡尔点
     * @param pointNum
     */
    void changePointToWorldSlot(int pointNum);

    /**
     * @brief inputPointTakeEffectSlot  使输入点数据生效槽函数
     * @param pointPro                  点数据
     */
    void inputPointTakeEffectSlot();

    /**
     * @brief selectDiInstructionSlot   选择DI指令槽函数
     */
    void selectDiInstructionSlot(bool isUseIn);

    /**
     * @brief clearNoteSlot             清除注释槽函数
     */
    void clearNoteSlot();

    /**
     * @brief selectWjntInstructionSlot 选择Wjnt指令槽函数
     */
    void selectWjntInstructionSlot();
    /**
     * @brief selectIncInstructionSlot  选择INC指令槽函数
     */
    void selectIncInstructionSlot();
    /**
     * @brief selectAccInstructionSlot  选择ACC指令槽函数
     */
    void selectAccInstructionSlot();
    /**
     * @brief selectOffsetInstructionSlot   选择Offset指令槽函数
     */
    void selectOffsetInstructionSlot();
    /**
     * @brief selectToolOffsetInstructionSlot   选择Tool_Offset指令槽函数
     */
    void selectToolOffsetInstructionSlot();
    /**
     * @brief selectEvInstructionSlot   选择EV指令槽函数
     */
    void selectEvInstructionSlot();
    /**
     * @brief selectPthInstructionSlot  选择PTH指令槽函数
     */
    void selectPthInstructionSlot();

    /**
     * @brief recvChangePointAndSave    接收来自comm通信的返回转换点,并且载入该点
     */
    void recvChangePointAndSave(PointPro recvPoint);
};

#endif // MOTIONINSTRUCTIONDELEGATE_H
